// 字符串处理对比：C vs C++
// 编译命令：g++ -o string_comparison string_comparison.cpp

#include <bits/stdc++.h>
using namespace std;

// C语言风格的字符串操作
void cStyleStringDemo() {
    cout << "=== C语言风格字符串操作 ===" << endl;
    
    char str1[100] = "Hello";
    char str2[] = "World";
    char str3[100];
    
    // 字符串连接
    strcat(str1, " ");
    strcat(str1, str2);
    printf("连接后的字符串: %s\n", str1);
    
    // 字符串复制
    strcpy(str3, str1);
    printf("复制后的字符串: %s\n", str3);
    
    // 字符串长度
    printf("字符串长度: %lu\n", strlen(str1));
    
    // 字符串比较
    if(strcmp(str1, str3) == 0) {
        printf("str1 和 str3 相等\n");
    } else {
        printf("str1 和 str3 不相等\n");
    }
    
    // 字符串查找
    char* found = strstr(str1, "World");
    if(found) {
        printf("找到 'World' 在位置: %ld\n", found - str1);
    }
}

// C++风格的字符串操作
void cppStyleStringDemo() {
    cout << "\n=== C++风格字符串操作 ===" << endl;
    
    string str1 = "Hello";
    string str2 = "World";
    string str3;
    
    // 字符串连接
    str1 += " " + str2;
    cout << "连接后的字符串: " << str1 << endl;
    
    // 字符串复制
    str3 = str1;
    cout << "复制后的字符串: " << str3 << endl;
    
    // 字符串长度
    cout << "字符串长度: " << str1.length() << endl;
    
    // 字符串比较
    if(str1 == str3) {
        cout << "str1 和 str3 相等" << endl;
    } else {
        cout << "str1 和 str3 不相等" << endl;
    }
    
    // 字符串查找
    size_t pos = str1.find("World");
    if(pos != string::npos) {
        cout << "找到 'World' 在位置: " << pos << endl;
    }
    
    // 字符串截取
    string substr = str1.substr(0, 5);
    cout << "截取前5个字符: " << substr << endl;
    
    // 字符串替换
    string replaced = str1;
    size_t replacePos = replaced.find("World");
    if(replacePos != string::npos) {
        replaced.replace(replacePos, 5, "C++");
        cout << "替换后的字符串: " << replaced << endl;
    }
}

// 字符串输入输出对比
void stringIODemo() {
    cout << "\n=== 字符串输入输出对比 ===" << endl;
    
    // C风格字符串输入
    cout << "C风格字符串输入:" << endl;
    char c_str[100];
    printf("请输入一个字符串: ");
    scanf("%s", c_str);
    printf("您输入的是: %s\n", c_str);
    
    // C++风格字符串输入
    cout << "\nC++风格字符串输入:" << endl;
    string cpp_str;
    cout << "请输入一个字符串: ";
    cin >> cpp_str;
    cout << "您输入的是: " << cpp_str << endl;
    
    // 读取整行
    cout << "\n请输入一行文本: ";
    cin.ignore(); // 清除输入缓冲区
    getline(cin, cpp_str);
    cout << "您输入的整行是: " << cpp_str << endl;
}

// 字符串转换演示
void stringConversionDemo() {
    cout << "\n=== 字符串转换演示 ===" << endl;
    
    // 数字转字符串
    int num = 12345;
    string numStr = to_string(num);
    cout << "数字 " << num << " 转换为字符串: " << numStr << endl;
    
    // 字符串转数字
    string strNum = "67890";
    int convertedNum = stoi(strNum);
    cout << "字符串 " << strNum << " 转换为数字: " << convertedNum << endl;
    
    // 浮点数转换
    double dbl = 3.14159;
    string dblStr = to_string(dbl);
    cout << "浮点数 " << dbl << " 转换为字符串: " << dblStr << endl;
    
    double convertedDbl = stod(dblStr);
    cout << "字符串 " << dblStr << " 转换为浮点数: " << convertedDbl << endl;
}

int main() {
    cout << "字符串处理对比演示" << endl;
    cout << "===================" << endl;
    
    cStyleStringDemo();
    cppStyleStringDemo();
    
    // 注释掉需要用户输入的部分，避免程序暂停
    // stringIODemo();
    
    stringConversionDemo();
    
    return 0;
}
